// 定义所有的公共的方法
// 方法1: 得到面包屑对应需要的path 和 菜单名的一个映射对象
const breadcrumbNameMap: Record<string, string> = {};
export function getbreadcrumbNameMap(routes: any) {
    routes.map((item: any) => {
        if (item.label) {
            if (item.children) {
                // breadcrumbNameMap[item.path] = item.label
                //判断当前路由菜单有子菜单的情况
                getbreadcrumbNameMap(item.children)
            }
            // 当前路由没有子菜单的情况
            breadcrumbNameMap[item.path] = item.label
        }
    })

    return breadcrumbNameMap
}

// 方法2: 将routes 数组结构转成 Tree 树形菜单结构数组
export function getTreeDataArr(routes: any) {
    const targetArr = routes.map((item: any) => {
        if (item.label && item.key) {
            if (item.children) {
                return {
                    title: item.label,
                    key: item.key,
                    children: getTreeDataArr(item.children)
                }
            } else {
                return {
                    title: item.label,
                    key: item.key
                }
            }
        }
    })

    return targetArr.filter((item: any) => item != undefined)
}


// 方法3:
// 将用户登录后返回的checkedKeys 数组, 转成routes 结构
export function getNewCheckedKeysFn(checkedKeys: any) {
    let newcheckedKeys: string[] = [];
    for (let i = 0; i < checkedKeys.length; i++) {
        let tempArr = checkedKeys[i].split('/')
        //tempArr为 ['','home'] , ['','account','adminlist']
        let str = '';
        for (let j = 1; j < tempArr.length; j++) {
            str += '/' + tempArr[j]
            //str为 /home   /account  /account/adminlist
            if (!newcheckedKeys.includes(str)) {
                newcheckedKeys.push(str)
            }
        }
    }

    return newcheckedKeys
}

// 定义方法4: 将routes 数组 和 newcheckedKeys做比较, 得到最新的routes,
// 使用该routes 渲染菜单

// const newcheckedKeys = [
//     '/home',
//     "/account",
//     "/account/adminlist",
//     "/product",
//     "/product/productlist",
//     "/product/filterlist",
// ];
export function getNewRoutes(routes: any, newcheckedKeys: any) {
    // console.log('newcheckedKeys', newcheckedKeys);
    for (let i = routes.length - 1; i >= 0; i--) {
        //console.log('item', routes[i]);
        const item = routes[i]; // 解决key 报错的问题
        // 表示有key 但是不包含
        if (item.key && !newcheckedKeys.includes(item.key)) {
            //console.log('item', routes[i])
            routes.splice(i, 1)
        }
        // 表示没有key的情况,需要删掉(因为该路由不需要渲染在左侧菜单栏)
        if (!item.key) {
            routes.splice(i, 1)
        }
        // 当有子菜单数组时候,删掉没有选中的子菜单
        if (item?.children) {
            getNewRoutes(item.children, newcheckedKeys)
        }
    }
    return routes
}


// 方法5: 将routes路由数组中的所有的path 放在一个数组中
const allcheckedkeys: any = [];
export function getAllcheckedKeysFn(routes: any) {
    routes.map((item: any) => {
        allcheckedkeys.push(item.path)
        if (item.children) {
            getAllcheckedKeysFn(item.children)
        }
    })

    return allcheckedkeys
}

